package manager.modulo.ferramenta.dao;

import java.sql.SQLException;
import manager.auxiliares.MensagemExcessao;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.LinkedList;
import manager.principal.fonte.JanelaLogin;
import manager.interfaces.InterfaceDao;
import manager.modulo.ferramenta.enumerator.EnumSituacaoFerramentaHistorico;
import manager.modulo.ferramenta.enumerator.EnumSituacaoFerramentaHistorico.SituacaoFerramentaHistoricoFerramenta;

/**
 * Esta classe será utilizada para cadastra a entidade user no banco de dados
 *
 * @author Thiago
 */
public class FerramentaHistoricoDao implements InterfaceDao {

    private int id;
    private int idHistoricoFerramenta;
    private int idFerramenta;
    private SituacaoFerramentaHistoricoFerramenta situacao;

    /**
     * Inicializando as variáveis
     */
    public FerramentaHistoricoDao() {
        idHistoricoFerramenta = 0;
        idFerramenta = 0;
    }

    public LinkedList<String> buscar(String opcao, String palavraBuscada, boolean limite) throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public static LinkedList<FerramentaHistoricoDao> listarFerramentaHistoricoPorIdHistorico(int idHistorico) {
        LinkedList<FerramentaHistoricoDao> result = new LinkedList<FerramentaHistoricoDao>();
        try {
            String sql = "SELECT id FROM ferramenta_historico WHERE id_historico_ferramenta = ? ";
            PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
            preparedStatement.setInt(1, idHistorico);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                FerramentaHistoricoDao ferramentaHistoricoDao = new FerramentaHistoricoDao();
                ferramentaHistoricoDao.buscar(resultSet.getInt("id"));
                result.add(ferramentaHistoricoDao);
            }
            return result;
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Buscando Funcionários");
        }
        return result;
    }

    /**
     * Carregar as informações do objeto usuário a partir de um id
     *
     * @param id Id da Ferramenta Histórico buscada
     */
    public void buscar(int id) {
        try {
            setId(id);
            String sql = "SELECT * FROM ferramenta_historico WHERE id = ?";
            PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
            preparedStatement.setInt(1, id);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.first()) {
                idHistoricoFerramenta = resultSet.getInt("id_historico_ferramenta");
                idFerramenta = resultSet.getInt("id_ferramenta");
                situacao = EnumSituacaoFerramentaHistorico.ConverterNumeroEnum(resultSet.getInt("cd_situacao"));
            }
            resultSet.close();
            preparedStatement.close();
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Buscando Funcionários");
        }
    }

    /**
     * Insere um usuário no banco
     */
    public void inserir() throws SQLException {
        String sql = "INSERT INTO ferramenta_historico "
                + "(id_historico_ferramenta,"
                + "id_ferramenta, "
                + "cd_situacao) "
                + "VALUES ("
                + "?," // 01 Id Histórico Ferramenta
                + "?," // 02 Id Ferramenta
                + "?)"; // 03 Id Ferramenta
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);

        preparedStatement.setInt(1, idHistoricoFerramenta);
        preparedStatement.setInt(2, idFerramenta);
        preparedStatement.setInt(3, EnumSituacaoFerramentaHistorico.ConverterEnumNumero(situacao));

        preparedStatement.executeUpdate();

        //Recebendo o novo id gerado
        ResultSet resultSet = preparedStatement.getGeneratedKeys();
        while (resultSet.next()) {
            id = resultSet.getInt(1);
        }

        preparedStatement.close();
        resultSet.close();
    }

    /**
     * Atualiza o usuário no banco
     */
    public void atualizar() throws SQLException {
       String sql = "  UPDATE ferramenta_historico SET "
                + "     id_ferramenta = ? ," // 01
                + "     id_historico_ferramenta = ? ," // 02
                + "     cd_situacao = ? " // 03
                + " WHERE "
                + "     id = ?";           // 04
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql);
        preparedStatement.setInt(1,idFerramenta);
        preparedStatement.setInt(2, idHistoricoFerramenta);
        preparedStatement.setInt(3, EnumSituacaoFerramentaHistorico.ConverterEnumNumero(situacao));
        preparedStatement.setInt(4, id);
        preparedStatement.executeUpdate();
        preparedStatement.close();
    }

    public void deletar() throws SQLException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public static void deletarPorHistoricoFerramenta(int idHistorico) throws SQLException {
        String sql = "DELETE FROM ferramenta_historico WHERE id_historico_ferramenta = ? ";
        PreparedStatement preparedStatement = JanelaLogin.getConnection().prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);

        preparedStatement.setInt(1, idHistorico);

        preparedStatement.executeUpdate();

        preparedStatement.close();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getIdHistoricoFerramenta() {
        return idHistoricoFerramenta;
    }

    public void setIdHistoricoFerramenta(int idHistoricoFerramenta) {
        this.idHistoricoFerramenta = idHistoricoFerramenta;
    }

    public int getIdFerramenta() {
        return idFerramenta;
    }

    public void setIdFerramenta(int idFerramenta) {
        this.idFerramenta = idFerramenta;
    }

    public SituacaoFerramentaHistoricoFerramenta getSituacao() {
        return situacao;
    }

    public void setSituacao(SituacaoFerramentaHistoricoFerramenta situacao) {
        this.situacao = situacao;
    }
}
